#ifndef segment_h
#define segment_h

#include "data_processor.h"

typedef struct _segment segment_t;

typedef struct {
    float32_t DiffMaxABS; /* 差值绝对值最大值 */
    float32_t ValMaxABS; /* 绝对值最大值 */
    float32_t StdDev; /* 标准差 */
} st_info_t; /* 数据段统计信息结构体 */

struct _segment {
    float32_t *DataPtr; /* 转换后数据首地址 */
    uint32_t No; /* 连续空间编号 */
    uint32_t Len; /* 数据长度 */
    uint32_t Capacity; /* 数据段大小 */
    st_info_t StInfo; /* 统计信息 */
    bool IsUsed; /* 标志数据段是否已用 */
}; /* 数据段结构体 */

/**
 *  初始化segment结构体
 */
void segment_init(segment_t *thiz, float32_t *dataPtr, uint32_t no);
/**
 *  将数据拷贝至segment结构体原始数据区
 */
void segment_load(segment_t *thiz, const void *srcPtr, uint32_t len);
/**
 *  在执行数据拷贝时调用该方法修改数据格式，该函数使用弱定义可在外部模块覆盖
 */
float32_t segment_data_format(uint32_t data);

#endif /* segment_h */
